package com.example.hrsystem.utils;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.Random;

/**
 * 审批相关工具类
 */
public class ApprovalUtils {
    
    private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);
    private static final SimpleDateFormat DATE_TIME_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA);
    private static final Random RANDOM = new Random();

    /**
     * 格式化日期
     * @param date 日期对象
     * @return 格式化后的日期字符串
     */
    public static String formatDate(Date date) {
        if (date == null) {
            return "";
        }
        return DATE_FORMAT.format(date);
    }

    /**
     * 格式化日期时间
     * @param date 日期对象
     * @return 格式化后的日期时间字符串
     */
    public static String formatDateTime(Date date) {
        if (date == null) {
            return "";
        }
        return DATE_TIME_FORMAT.format(date);
    }

    /**
     * 生成审批单号
     * @param prefix 前缀标识（如LEAVE, OVERTIME, BUSINESS）
     * @return 审批单号
     */
    public static String generateApprovalNumber(String prefix) {
        String timestamp = String.valueOf(System.currentTimeMillis());
        String randomNum = String.format("%04d", RANDOM.nextInt(10000));
        return prefix + "-" + timestamp.substring(6) + "-" + randomNum;
    }

    /**
     * 计算两个日期之间的天数差
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 天数差
     */
    public static int calculateDaysDifference(Date startDate, Date endDate) {
        if (startDate == null || endDate == null) {
            return 0;
        }
        long diffInMillis = endDate.getTime() - startDate.getTime();
        return (int) (diffInMillis / (1000 * 60 * 60 * 24)) + 1; // +1 包含起始日期
    }

    /**
     * 检查日期是否有效
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 是否有效
     */
    public static boolean isValidDateRange(Date startDate, Date endDate) {
        if (startDate == null || endDate == null) {
            return false;
        }
        return !endDate.before(startDate);
    }

    /**
     * 获取状态显示文本
     * @param status 状态代码
     * @return 状态显示文本
     */
    public static String getStatusDisplayText(String status) {
        if (status == null) {
            return "未知";
        }
        switch (status) {
            case "PENDING":
                return "待审批";
            case "APPROVED":
                return "已批准";
            case "REJECTED":
                return "已拒绝";
            case "CANCELLED":
                return "已取消";
            case "COMPLETED":
                return "已完成";
            default:
                return status;
        }
    }
}